<?php

require_once '..' . DS . '/DAO/Conexao.php';
require_once 'BeanEntrada.php';
require_once 'BeanTesoureiro.php';
require_once 'BeanMembro.php';
require_once 'BeanTipoEntrada.php';
require_once 'BeanTipoPagamento.php';
require_once 'BeanVinculo.php';

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Description of ModelEntrada
 *
 * @author David
 */
class ModelEntrada {

    public $p = null;

    public function ModelEntrada() {
        $this->p = Conexao::Intancia()->Db();
    }

    //GETS

    /**
     * Retorna todas as entradas do mes
     * @param type $mes
     * @param type $ano
     * @return \BeanEntrada
     */
    public function getEntrada($mes, $ano) {
        $sql = "SELECT 
                    a.ent_id,
                    a.ent_valor,
                    date_format(a.ent_data, '%d/%m/%Y %H:%i') as ent_data,
                    b.tent_id,
                    b.tent_descricao,
                    c.tpag_id,
                    c.tpag_descricao,
                    d.mem_id,
                    d.mem_nome as membro,
                    f.mem_nome as tesoureiro,
                    g.vin_id
                FROM entrada a
                INNER JOIN tipo_entrada b ON a.fk_tent_id = b.tent_id
                INNER JOIN tipo_pagamento c ON a.fk_tpag_id = c.tpag_id
                LEFT JOIN membro d ON a.fk_mem_id = d.mem_id
                INNER JOIN tesoureiro e ON a.fk_tes_id = e.tes_id
                INNER JOIN membro f ON e.fk_mem_id = f.mem_id
                INNER JOIN vinculo g ON b.fk_vin_id = g.vin_id
                WHERE MONTH(a.ent_data) = ? AND YEAR(a.ent_data) = ?;";
        $stmt = $this->p->prepare($sql);
        $stmt->bindValue(1, $mes);
        $stmt->bindValue(2, $ano);
        $res = $stmt->execute();

        $resultado = array();
        if ($res != 1) {
            $resultado = "erro";
        } else {
            while ($linha = $stmt->fetch()) {

                $beanEntrada = new BeanEntrada();
                $beanEntrada->codigo = $linha["ent_id"];
                $beanEntrada->valor = $linha["ent_valor"];
                $beanEntrada->data = $linha["ent_data"];

                $beanVinculo = new BeanVinculo();
                $beanVinculo->codigo = $linha["vin_id"];

                $beanTipoEntrada = new BeanTipoEntrada();
                $beanTipoEntrada->codigo = $linha["tent_id"];
                $beanTipoEntrada->descricao = $linha["tent_descricao"];
                $beanTipoEntrada->beanVinculo = $beanVinculo;

                $beanTipoPagamento = new BeanTipoPagamento();
                $beanTipoPagamento->codigo = $linha["tpag_id"];
                $beanTipoPagamento->tipoPagamento = $linha["tpag_descricao"];

                $beanMembro = new BeanMembro();
                $beanMembro->codigo = $linha["mem_id"];
                $beanMembro->nome = $linha["membro"];


                $beanMembroTesou = new BeanMembro();
                $beanMembroTesou->nome = $linha["tesoureiro"];

                $beanTesoureiro = new BeanTesoureiro();
                $beanTesoureiro->beanMembro = $beanMembroTesou;

                $beanEntrada->beanMembro = $beanMembro;
                $beanEntrada->beanTipoEntrada = $beanTipoEntrada;
                $beanEntrada->beanTipoPagamento = $beanTipoPagamento;
                $beanEntrada->beanTesoureiro = $beanTesoureiro;

                $resultado[] = $beanEntrada;
            }
        }
        return $resultado;
    }

    public function getEntradaMembro($codigo) {
        $sql = "SELECT 
                    a.ent_id,
                    a.ent_valor,
                    DATE_FORMAT(a.ent_data, '%d/%m/%Y') as ent_data,
                    b.tent_descricao,
                    c.tpag_descricao  

                FROM entrada a
                INNER JOIN tipo_entrada b ON a.fk_tent_id = b.tent_id
                INNER JOIN tipo_pagamento c ON a.fk_tpag_id = c.tpag_id
                WHERE fk_mem_id = ?
                ORDER BY ent_id DESC;";

        $stmt = $this->p->prepare($sql);
        $stmt->bindValue(1, $codigo);
        $res = $stmt->execute();

        $resultado = array();
        if ($res != 1) {
            $resultado = "erro";
        } else {
            while ($linha = $stmt->fetch()) {

                $beanEntrada = new BeanEntrada();
                $beanEntrada->codigo = $linha["ent_id"];
                $beanEntrada->valor = $linha["ent_valor"];
                $beanEntrada->data = $linha["ent_data"];

                $beanTipoEntrada = new BeanTipoEntrada();
                $beanTipoEntrada->descricao = $linha["tent_descricao"];

                $beanTipoPagamento = new BeanTipoPagamento();
                $beanTipoPagamento->tipoPagamento = $linha["tpag_descricao"];

                $beanEntrada->beanTipoEntrada = $beanTipoEntrada;
                $beanEntrada->beanTipoPagamento = $beanTipoPagamento;
                $resultado[] = $beanEntrada;
            }
        }
        return $resultado;
    }

    public function getSaldo($mes, $ano) {
        
        $data = $ano . "-" . $mes . "-31";
        $sql = "SELECT 
                (SELECT sum(ent_valor) FROM entrada WHERE ent_data < :data) - (SELECT sum(sai_valor) FROM saida WHERE sai_data < :data) as saldo;";

        $stmt = $this->p->prepare($sql);
        $stmt->bindValue(':data', $data, PDO::PARAM_STR);
        $res = $stmt->execute();
        
        
        $resultado = null;
        if ($res != 1) {
            $resultado = "erro";
        }
        
        while ($linha = $stmt->fetch()) {
            $resultado = $linha["saldo"];
        }
        
        return $resultado;
    }

    // SETS

    /**
     * Insere entrada no banco de dados
     * @param type $valor
     * @param type $tipoentrada
     * @param type $membro
     * @param type $tesoureiro
     * @param type $pagamento
     * @return string
     */
    public function setEntrada($valor, $tipoentrada, $membro, $tesoureiro, $pagamento) {

        //var_dump($valor, $tipoentrada, $membro, $tesoureiro);

        $sql = "INSERT INTO entrada 
                    (ent_valor, fk_tent_id, ent_data, fk_mem_id, fk_tes_id, fk_tpag_id)
                VALUES 
                    (:valor, :tipoentrada, now(), :membro, 
                    (SELECT max(tes_id) FROM tesoureiro WHERE fk_mem_id = :tesoureiro), 
                    :pagamento);";
        $stmt = $this->p->prepare($sql);
        $stmt->bindValue(':valor', $valor);
        $stmt->bindValue(':tipoentrada', $tipoentrada);
        $stmt->bindValue(':membro', $membro);
        $stmt->bindValue(':tesoureiro', $tesoureiro);
        $stmt->bindValue(':pagamento', $tesoureiro);
        $res = $stmt->execute();

        $resultado = array();
        if ($res != 1) {
            $resultado = "erro";
        }
        return $resultado;
    }

    /**
     * Atualiza entrada no banco de dados
     * @param type $codigo
     * @param type $membro
     * @param type $tesoureiro
     * @param type $tipoentrada
     * @param type $valor
     * @param type $data
     * @param type $tipopagamento
     * @return string
     */
    public function setUpdateEntrada($codigo, $membro, $tipoentrada, $valor, $tipopagamento) {
        $sql = "UPDATE entrada SET
                    fk_mem_id = ?,
                    fk_tent_id = ?,
                    ent_valor = ?,
                    fk_tpag_id = ?
                WHERE ent_id = ?";

        $stmt = $this->p->prepare($sql);
        $stmt->bindValue(1, $membro);
        $stmt->bindValue(2, $tipoentrada);
        $stmt->bindValue(3, $valor);
        $stmt->bindValue(4, $tipopagamento);
        $stmt->bindValue(5, $codigo);
        $res = $stmt->execute();

        $resultado = array();
        if ($res != 1) {
            $resultado = "erro";
        }
        return $resultado;
    }

    /**
     * Ecluir entrada do banco de dados
     * @param type $codigo
     * @return string
     */
    public function setDeleteEntrada($codigo) {
        $sql = "DELETE FROM entrada WHERE ent_id = ?;";

        $stmt = $this->p->prepare($sql);
        $stmt->bindValue(1, $codigo);
        $res = $stmt->execute();

        $resultado = array();
        if ($res != 1) {
            $resultado = "erro";
        }
        return $resultado;
    }

}